package com.hyopt.common.push.param;

import lombok.Data;

import javax.validation.constraints.NotNull;
import java.util.Map;

/**
 * @ClassName BaseParam
 * @Description TODO
 * @Author yangjun
 * @date 2019/12/10 11:42
 * @Version 1.0
 **/
@Data
public class ParamEntity {

    @NotNull
    private String appkey;// 必填，应用唯一标识

    @NotNull
    private String timestamp;// 必填，时间戳，10位或者13位均可，时间戳有效期为10分钟

    // 必填，消息发送类型
    //   unicast-单播
    //   listcast-列播，要求不超过500个device_token
    //   filecast-文件播，多个device_token可通过文件形式批量发送
    //   broadcast-广播
    //   groupcast-组播，按照filter筛选用户群, 请参照filter参数
    //   customizedcast，通过alias进行推送，包括以下两种case:
    //     - alias: 对单个或者多个alias进行推送
    //     - file_id: 将alias存放到文件后，根据file_id来推送
    @NotNull
    private String type;

    // 当type=unicast时, 必填, 表示指定的单个设备
    // 当type=listcast时, 必填, 要求不超过500个, 以英文逗号分隔
    @NotNull
    private String device_tokens;

    // 当type=customizedcast时, 必填
    // alias的类型, alias_type可由开发者自定义, 开发者在SDK中
    // 调用setAlias(alias, alias_type)时所设置的alias_type
    private String alias_type;

    // 当type=customizedcast时, 选填(此参数和file_id二选一)
    // 开发者填写自己的alias, 要求不超过500个alias, 多个alias以英文逗号间隔
    // 在SDK中调用setAlias(alias, alias_type)时所设置的alia
    private String alias;

    // 当type=filecast时，必填，file内容为多条device_token，以回车符分割
    // 当type=customizedcast时，选填(此参数和alias二选一)
    //   file内容为多条alias，以回车符分隔。注意同一个文件内的alias所对应
    //   的alias_type必须和接口参数alias_type一致。
    // 使用文件播需要先调用文件上传接口获取file_id，参照"文件上传"
    private String file_id;

    // 当type=groupcast时，必填，用户筛选条件，如用户标签、渠道等，参考附录G。
    private Map filter;

    // 可选，正式/测试模式。默认为true
    // 测试模式只对“广播”、“组播”类消息生效，其他类型的消息任务（如“文件播”）不会走测试模式
    // 测试模式只会将消息发给测试设备。测试设备需要到web上添加。
    // Android: 测试设备属于正式设备的一个子集。
    private String production_mode;

    // 可选，发送消息描述，建议填写。
    //系统弹窗，只有display_type=notification生效
    private String description;


    private Object payload;

    // 可选，发送策略
    private Object policy;


    private String mipush;

    // 可选，mipush值为true时生效，表示走系统通道时打开指定页面acitivity的完整包路径。
    private String mi_activity;



}
